#include<iostream>
using namespace std;
/*
区别：
1、普通函数调用时可以发生自动类型转换（隐式类型转换）
2、函数模板调用时，如果利用自动类型推导，不会发生隐式类型转换
3、如果利用显示指定类型的方式，可以发生隐式类型转换
*/
//普通函数
int myAdd01(int a,int b)
{
    return a+b;
}
void test01()
{
    int a=10;
    int b=20;
    char c='c';//c=99
    //1、普通函数调用时可以发生自动类型转换（隐式类型转换）
    cout<<myAdd01(a,c)<<endl;
}
//函数模板
template<class T>
T myAdd02(T a,T b)
{
    return a+b;
}
void test02()
{
    int a=10;
    int b=20;
    char c='c';
    //2、函数模板调用时，如果利用自动类型推导，不会发生隐式类型转换
    // cout<<myAdd02(a,c)<<endl;

    //3、如果利用显示指定类型的方式，可以发生隐式类型转换
    cout<<myAdd02<int>(a,c)<<endl;
}
int main()
{
    test01();
    test02();
}
/*
总结：
建议使用显示指定类型的方式，调用函数模板，因为可以自己确定通用类型T
*/